package com.jiepos.mpos.common.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.CallableStatementCreator;
import org.springframework.stereotype.Repository;

import com.jiepos.mpos.common.entity.App_Card_BinEntity;
import com.jiepos.mpos.core.dao.BaseDao;

import oracle.jdbc.driver.OracleTypes;


/**
 * 
 * 
 * <p>标题: —— 卡bin表操作类</p>
 * <p>模块: 通用平台</p>
 * <p>版权: Copyright (c) 2017 江苏杰博实信息技术有限公司
 * @ProjectName:  [mpos] 
 * @Package com.jiepos.mpos.common.dao 
 * @author 张学涛
 * @version 1.0
 * @since 2017年9月26日下午2:14:00
 * @history（历次修订内容、修订人、修订时间等）
 */
@Repository
public class CardBinDao extends BaseDao<App_Card_BinEntity> {
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public Map<String,String> getCardBinAttr(final String cardNo){

		Map map = (Map)  jdbcTemplate.execute(new CallableStatementCreator() {
			public CallableStatement createCallableStatement(Connection con) throws SQLException {
				String storedProc = "{call package_mainbusiness.pro_get_card_bin_attr (?,?,?,?,?,?,?,?)}";// 调用的sql
				CallableStatement cs = con.prepareCall(storedProc);
				cs.setString(1, cardNo);// 卡号
				cs.registerOutParameter(2, OracleTypes.VARCHAR);// 卡bin
				cs.registerOutParameter(3, OracleTypes.VARCHAR);// 卡名称
				cs.registerOutParameter(4, OracleTypes.VARCHAR);// 卡机构代码
				cs.registerOutParameter(5, OracleTypes.VARCHAR);// 卡机构名称
				cs.registerOutParameter(6, OracleTypes.VARCHAR);// 卡性质
				cs.registerOutParameter(7, OracleTypes.VARCHAR);// 总行行号
				cs.registerOutParameter(8, OracleTypes.VARCHAR);// 总行名称
				return cs;
			}
		}, new CallableStatementCallback() {
			public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
				cs.execute();		
				Map	map = new HashMap();
				map.put("card_bin", cs.getString(2));
				map.put("card_name", cs.getString(3));
				map.put("card_ins_cd", cs.getString(4));
				map.put("card_ins_nm", cs.getString(5));
				map.put("crd_nature", cs.getString(6));
				map.put("super_bank_no", cs.getString(7));
				map.put("super_bank_name", cs.getString(8));
				log.info("卡bin相关信息:[{}]",map);
				return map;// 获取输出参数的值
			}
		});
		return map;// 获取输出参数的值
	}
}
